﻿Imports Microsoft.Reporting.WinForms
Imports System.IO

Public Class ReporteadorVP
    Dim _RutaReportes As String = Verificador._RutaReportes
    Enum Reportes
        Ninguno
        Ejercidos
        Vendidos
        Escaneados
        SurtidoDisponible
        ValesClienteFecha
    End Enum
    Dim _Reporte As Reportes = Reportes.Ninguno
    Dim _Paramrtros As New List(Of String)
    Public Property Reporte As String
        Set(value As String)
            _Reporte = value
        End Set
        Get
            Return _Reporte
        End Get
    End Property
    Public ReadOnly Property Parametros As List(Of String)
        Get
            Return _Paramrtros
        End Get
    End Property

    Private Sub ReporteadorVP_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        If IO.Directory.Exists(_RutaReportes & "\RDLC") = True Then
            IO.Directory.Delete(_RutaReportes & "\RDLC", True)
        End If
        Me.Dispose()
    End Sub
    Private Sub CargaReporte()
        'Try
        If IO.Directory.Exists(_RutaReportes & "\RDLC") = False Then
            IO.Directory.CreateDirectory(_RutaReportes & "\RDLC")
        End If

        If IO.File.Exists(_RutaReportes & "\ReporteValesClienteFecha.rdlc") = False Then
            GuardarRecurso(My.Resources.ReporteValesClienteFecha, "ReporteValesClienteFecha.rdlc")
        End If
        If IO.File.Exists(_RutaReportes & "\ReportesEscaneados.rdlc") = False Then
            GuardarRecurso(My.Resources.reportesescaneados, "ReportesEscaneados.rdlc")
        End If
        If IO.File.Exists(_RutaReportes & "\ReporteValesVendidos.rdlc") = False Then
            GuardarRecurso(My.Resources.ReporteValesVendidos, "ReporteValesVendidos.rdlc")
        End If
        If IO.File.Exists(_RutaReportes & "\ReporteValesEjercidos.rdlc") = False Then
            GuardarRecurso(My.Resources.ReporteValesEjercidos, "ReporteValesEjercidos.rdlc")
        End If
        If IO.File.Exists(_RutaReportes & "\ReporteSurtidoDisponible.rdlc") = False Then
            GuardarRecurso(My.Resources.reportesurtidodisponible, "ReporteSurtidoDisponible.rdlc")
        End If
        If _Reporte = Reportes.Ninguno Then
            On Error Resume Next
            Me.Dispose()
        End If

        Me.EncabezadoTableAdapter.Fill(Me.DSvalesVendidos.Encabezado)
        Dim Oencab As New ReportDataSource("Encabezado", EncabezadoBindingSource)
        ReportViewer.LocalReport.DataSources.Add(Oencab)
        Select Case _Reporte
            Case Reportes.SurtidoDisponible

                Dim _Nombre As String = Split(_Paramrtros(0), "|")(1)
                If EjercudoDisponibleTableAdapter.Fill(DSvalesVendidos.EjercudoDisponible) <= 0 Then
                    MsgBox("No hay registros para el cliente seleccionado", MsgBoxStyle.Exclamation, "Atencion")
                    Me.DialogResult = Windows.Forms.DialogResult.Cancel
                    Me.Dispose()
                    Return
                End If
                ReportViewer.LocalReport.ReportPath = (_RutaReportes & "\RDLC\ReporteSurtidoDisponible.rdlc")
                Dim param As New ReportParameter("nombre", Split(_Paramrtros(0), "|")(1))
                ReportViewer.LocalReport.SetParameters(param)
                If _Nombre <> "Todos" Then
                    EjercudoDisponibleBindingSource.Filter = "cliente='" & _Nombre & "'"
                Else
                    EjercudoDisponibleBindingSource.Filter = ""
                End If
                Dim oedc As New ReportDataSource("DsSurtidosDisponible", EjercudoDisponibleBindingSource)
                ReportViewer.LocalReport.DataSources.Add(oedc)
            Case Reportes.Ejercidos

                Dim Oejercidos As New ReportDataSource("ValesEjercidos", ValesEjercidosBindingSource)
                ReportViewer.LocalReport.DataSources.Add(Oejercidos)
                If Me.ValesEjercidosTableAdapter.Fill(Me.DSvalesVendidos.ValesEjercidos, _Paramrtros(0), _Paramrtros(1)) <= 0 Then
                    MsgBox("No hay registros en ese Rango", MsgBoxStyle.Exclamation, "Atencion")
                    DialogResult = Windows.Forms.DialogResult.Cancel
                    Me.Dispose()
                    Return
                End If

                ReportViewer.LocalReport.ReportPath = (_RutaReportes & "\RDLC\ReporteValesEjercidos.rdlc")
                Dim p1 As New ReportParameter("Inicial", _Paramrtros(0))
                Dim p2 As New ReportParameter("Final", _Paramrtros(1))
                ReportViewer.LocalReport.SetParameters(p1)
                ReportViewer.LocalReport.SetParameters(p2)
            Case Reportes.Vendidos
                Dim Ov As New ReportDataSource("DSv", ValesVendidosBindingSource)
                ReportViewer.LocalReport.DataSources.Add(Ov)

                If Me.ValesVendidosTableAdapter.FillValesVendidos(Me.DSvalesVendidos.ValesVendidos, _Paramrtros(0), _Paramrtros(1)) <= 0 Then
                    MsgBox("No hay registros en ese Rango", MsgBoxStyle.Exclamation, "Atencion")
                    Me.DialogResult = Windows.Forms.DialogResult.Cancel
                    Me.Close()
                    Return
                End If
                ReportViewer.LocalReport.ReportPath = (_RutaReportes & "\RDLC\ReporteValesVendidos.rdlc")
                Dim p1 As New ReportParameter("Inicial", _Paramrtros(0))
                Dim p2 As New ReportParameter("Final", _Paramrtros(1))
                ReportViewer.LocalReport.SetParameters(p1)
                ReportViewer.LocalReport.SetParameters(p2)
            Case Reportes.Escaneados

                'Dim Cn As New SqlClient.SqlConnection(My.Settings.AdmingasConnectionString)
                'Dim Cmd As New SqlClient.SqlCommand("select NumS,serie+'-' + CASE WHEN len(cliente)<6  THEN right('000000'+cast(cliente as varchar(60)),6) ELSE cliente END +'-' + CASE WHEN len(numvale)<8  THEN right('000000'+cast(numvale as varchar(60)),8) ELSE cast(numvale as varchar(8)) END as Foliovale,FechaVenta,FechaSurtido,surtido as EstadoVale,Estado,ImpVale,serie,cliente,numvale,(select TOP(1) nombre from flotillas f where flotilla=v.cliente) as nombre from vales v where nums in(" & _Paramrtros(0) & ")", Cn)
                'Dim DT As New SqlClient.SqlDataAdapter(Cmd)
                'If DT.Fill(DSvalesVendidos.Vales) <= 0 Then
                '    MsgBox("No hay registros", MsgBoxStyle.Critical, "No hay registros")
                '    Me.Dispose()
                '    Return
                'End If

                Dim ValesEscaneadosB As New BindingSource(Verificador.DSvalesVendidos, "ValesEscaneados")
                Dim OvalesEscaneados As New ReportDataSource("DsReporteEscaneados", ValesEscaneadosB)
                ReportViewer.LocalReport.DataSources.Add(OvalesEscaneados)
                ReportViewer.LocalReport.ReportPath = (_RutaReportes & "\RDLC\ReportesEscaneados.rdlc")
            Case Reportes.ValesClienteFecha
                ReportViewer.LocalReport.ReportPath = (_RutaReportes & "\RDLC\ReporteValesClienteFecha.rdlc")
                Dim p1 As New ReportParameter("Inicial", _Paramrtros(0))
                Dim p2 As New ReportParameter("Final", _Paramrtros(1))
                Dim p3 As New ReportParameter("Cliente", _Paramrtros(2))
                ReportViewer.LocalReport.SetParameters(p1)
                ReportViewer.LocalReport.SetParameters(p2)
                ReportViewer.LocalReport.SetParameters(p3)
                If ValesTableAdapter.FillByClienteFechaVenta(DSvalesVendidos.Vales, _Paramrtros(0), _Paramrtros(1)) <= 0 Then
                    MsgBox("No hay registros que cumplan con los parametros especificados", MsgBoxStyle.Critical, "Atencion")
                    Me.DialogResult = Windows.Forms.DialogResult.Cancel
                    Me.Close()
                    Return
                Else
                    Dim _nombre = Split(_Paramrtros(2), "|")(0)
                    If _nombre <> "0000" Then
                        ValesBindingSource.Filter = "cliente='" & _nombre & "'"
                        If ValesBindingSource.List.Count <= 0 Then
                            MsgBox("No hay registros que cumplan con los parametros especificados", MsgBoxStyle.Critical, "Atencion")
                            Me.DialogResult = Windows.Forms.DialogResult.Cancel
                            Me.Close()
                            Return
                        End If
                    Else
                        ValesBindingSource.Filter = ""
                    End If
                End If
                Dim OvalesEscaneados As New ReportDataSource("DsvalesClienteFecha", ValesBindingSource)
                ReportViewer.LocalReport.DataSources.Add(OvalesEscaneados)
            Case Else
                MsgBox("El reporte " & _Reporte & " No esta disponible", MsgBoxStyle.Critical, "Error")
                Me.DialogResult = Windows.Forms.DialogResult.Cancel
                Me.Close()
                Return
                Exit Sub
        End Select
        Me.ReportViewer.RefreshReport()
        _Paramrtros.Clear()
        _Reporte = Reportes.Ninguno
        'Catch ex As Exception
        '    MsgBox("Error cargando Reporte " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Error")
        'End Try
    End Sub
    Private Sub ReporteadorVP_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CargaReporte()
    End Sub
    Public Sub ExportarReporte(ByVal Ruta As String, ByVal strFormat As String)
        Dim bytes() As Byte
        Dim strDeviceInfo As String = ""
        Dim strMimeType As String = ""
        Dim strEncoding As String = ""
        Dim strExtension As String = ""
        Dim strStreams() As String
        Dim warnings() As Warning
        Dim oFileStream As FileStream
        Dim _stream = New List(Of Stream)
        Try
            bytes = ReportViewer.LocalReport.Render(strFormat, strDeviceInfo, strMimeType, strEncoding, strExtension, strStreams, warnings)

            oFileStream = New FileStream(Ruta, FileMode.Create)
            oFileStream.Write(bytes, 0, bytes.Length)
            _stream.Add(oFileStream)
        Finally
            If Not IsNothing(oFileStream) Then
                oFileStream.Close()
                oFileStream.Dispose()
            End If
            If IO.File.Exists(Ruta) Then
                Process.Start(Ruta)
            End If
        End Try
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim saveFileDialog1 As New SaveFileDialog()
        saveFileDialog1.Filter = " Archivo PDF|*.pdf"
        saveFileDialog1.Title = "Exportar a PDF"
        saveFileDialog1.FileName = "Reporte " & Format(Now, "dd-MM-yyyy hh-mm-ss")

        If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And saveFileDialog1.FileName <> "" Then
            ExportarReporte(saveFileDialog1.FileName, "PDF")
        End If

    End Sub

    Private Sub IExcel_Click(sender As Object, e As EventArgs) Handles IExcel.Click
        Dim saveFileDialog1 As New SaveFileDialog()
        saveFileDialog1.Filter = " Archivo Excel|*.xls"
        saveFileDialog1.Title = "Exportar a Excel"
        saveFileDialog1.FileName = "Reporte " & Format(Now, "dd-MM-yyyy hh-mm-ss")

        If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And saveFileDialog1.FileName <> "" Then
            ExportarReporte(saveFileDialog1.FileName, "EXCEL")
        End If
    End Sub

    Private Sub Iword_Click(sender As Object, e As EventArgs) Handles Iword.Click
        Dim saveFileDialog1 As New SaveFileDialog()
        saveFileDialog1.Filter = " Archivo Word|*.doc"
        saveFileDialog1.Title = "Exportar a Word"
        saveFileDialog1.FileName = "Reporte " & Format(Now, "dd-MM-yyyy hh-mm-ss")

        If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And saveFileDialog1.FileName <> "" Then
            ExportarReporte(saveFileDialog1.FileName, "WORD")
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Bsalir.Click
        Me.DialogResult = Windows.Forms.DialogResult.Cancel
    End Sub
End Class